package py.com.sole.solesys;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

import py.com.sole.dao.DaoFactory;

import py.com.sole.model.Rol;

@ManagedBean
@SessionScoped
public class RolBean implements Serializable {

  /**
   *
   */
  private static final long serialVersionUID = -4873747667246098929L;
  private int id;
  private String descripcion;
  private List<Rol> roles;
  private Rol rolSelected;
  private boolean bloquearBotones = true;

  public void clean() {
    this.descripcion = null;
    this.rolSelected = null;
    this.bloquearBotones = true;
    //RequestContext.getCurrentInstance().update("dtRol");
  }

  public void addRol() {
    FacesContext context = FacesContext.getCurrentInstance();

    Rol r = DaoFactory.getRol().getRolByName(descripcion);
    if (r != null) {
      context.addMessage(null, new FacesMessage("Advertencia",
                                                "El rol " + descripcion
                                                + " ya se encuentra registrado"));
      this.clean();
      return;
    }

    Rol rol = new Rol();
    rol.setDescripcion(descripcion);
    rol.setActivo(true);
    DaoFactory.getRol().addRol(rol);
    context.addMessage(null, new FacesMessage("Mensaje", "Rol "
                                              + descripcion + " almacenado exitosamente"));
    roles = DaoFactory.getRol().getRoles();
    this.clean();
  }

  public void deleteRol() {
    //DaoFactory.getRol().deleteRol(this.getRolSelected().getId());
    Rol rol = DaoFactory.getRol().getRolById(
      this.getRolSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();
    rol.setDescripcion(descripcion);
    rol.setActivo(false);
    DaoFactory.getRol().updateRol(rol);
    context.addMessage(null, new FacesMessage("Mensaje", "Rol "
                                              + descripcion + " eliminado exitosamente"));
    roles = DaoFactory.getRol().getRoles();

    this.clean();
  }

  public void editRol() {
    Rol rol = DaoFactory.getRol().getRolById(
      this.getRolSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();
    rol.setDescripcion(descripcion);
    DaoFactory.getRol().updateRol(rol);
    context.addMessage(null, new FacesMessage("Mensaje", "Rol "
                                              + descripcion + " almacenado exitosamente"));
    roles = DaoFactory.getRol().getRoles();

    this.clean();
  }

  public void onRowSelect(SelectEvent event) {
    this.rolSelected = ((Rol) event.getObject());
    this.descripcion = this.rolSelected.getDescripcion();
    this.bloquearBotones = false;
    RequestContext.getCurrentInstance().update("rol-form:dtRol");
  }

  public void guardarListener() {

  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getDescripcion() {
    return descripcion;
  }

  public void setDescripcion(String descripcion) {
    this.descripcion = descripcion;
  }

  public List<Rol> getRoles() {
    roles = DaoFactory.getRol().getRoles();
    return roles;
  }

  public void setRoles(List<Rol> roles) {
    this.roles = roles;
  }

  public Rol getRolSelected() {
    return rolSelected;
  }

  public void setRolSelected(Rol rolSelected) {
    this.rolSelected = rolSelected;
  }

  public boolean isBloquearBotones() {
    return bloquearBotones;
  }

  public void setBloquearBotones(boolean bloquearBotones) {
    this.bloquearBotones = bloquearBotones;
  }

}
